/**
 * 
 */
package net.jadoth.identity;

/**
 * Objects of this type specify the data-defined identity of an object of type <code>I</code>.
 * The values that define the identified object are called identity values. They should, but don't have to, 
 * have "primitive" data types like primitives, primitive Wrappers and String. 
 * <p>
 * It is strongly recommended that any datatype used as an identity value is immutable. 
 * And of cource that an implementation of this type is immutable as well. 
 * <p>
 * A good examples for a concrete "Identity" is a Primary Key in a database table.<br>
 * Subtypes of this interface can be used to abstract (prescind) Primary Key values in application code.    
 * <p>
 * It is recommended that implementations of this type properly override equals(), hashCode() and toString() in close
 * relation to the identity values they handle.
 * 
 * @author Thomas Muenz
 *
 */
public interface Identity<I>
{

}
